//路由配置文件

import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'

Vue.use(VueRouter)

//保存VueRouter原型对象方法
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace

//针对多次push等传数据，弹出NavigationDuplicated错误
//重写
VueRouter.prototype.push = function(location,res,rej){
    if(res && rej){
        originPush.call(this,location,res,rej)
    }else{
        originPush.call(this,location,()=>{},()=>{})
    }
}

VueRouter.prototype.replace = function(location,res,rej){
    if(res && rej){
        originReplace.call(this,location,res,rej)
    }else{
        originReplace.call(this,location,()=>{},()=>{})
    }
}

//对外暴露VueRouter类的实例
let router = new VueRouter({
    //配置路由
    routes,
    //滚动条行为
    scrollBehavior(to,from,savedPosition){
        return {y:0}
    }
})

//全局守卫、前置守卫（在路由跳转之前判断）
router.beforeEach(async (to,from,next)=>{
    //to:获取跳转路由信息，next：放行函数
    //获取用户信息
    let token = store.state.user.token
    //用户信息
    let name = store.state.user.userInfo.name
    //如果登录了
    if(token){
        //用户跳转login登录register注册
        if(to.path=='/login'||to.path=='/register'){
            //🈲跳login
            next('/home')
        }else{
            //登录了跳转其他路由(有用户信息)
            if(name){
                next()
            //登录了跳转其他路由(没用户信息)
            //派发action找仓库要存储信息
            }else{
                try {
                    //获取成功
                    await store.dispatch("getUserInfo")
                    //放行
                    next()
                } catch (error) {
                    //获取不到token（失效）
                    //清除旧token
                    await store.dispatch('getlogout')
                    next('/home')
                }
            }
        }
    }else{
        //未登录，游客身份放行（）
        //获取跳转路由
        let toPath = to.path
        //判断路由是否包含以下url（以下三个皆是登录的用户才能去的路由）
        if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1 || toPath.indexOf('/center')!=-1){
            //把未登录但是点过又不能去的路由 保存在url
            if(toPath.indexOf('/pay')!=-1 || toPath.indexOf('/trade')!=-1 || toPath.indexOf('/shopcart')!=-1 ){
                next('/home')
            }else{
                next('/login?redirect='+toPath)
            }
        }else{
            //
            next()
        }
    }
})


export default router